package tools

import (
	"fmt"
	"reflect"
	"strconv"
)

func StringToUint64Ptr(s *string) (*uint64, error) {
	if s == nil {
		return nil, nil
	}
	u, err := strconv.ParseUint(*s, 10, 64)
	if err != nil {
		return nil, err
	}
	return &u, nil
}

func Uint64ToStringPtr(u *uint64) *string {
	if u == nil {
		return nil
	}
	s := strconv.FormatUint(*u, 10)
	return &s
}

func IsPointer(value any) bool {
	v := reflect.ValueOf(value)
	return v.Kind() == reflect.Ptr
}

func PrintPointerValue(value any) any {
	v := reflect.ValueOf(value)
	// 检查是否是指针
	if v.Kind() != reflect.Ptr {
		fmt.Println("提供的值不是指针类型")
		return value
	}
	// 解引用指针
	v = v.Elem()
	fmt.Println(v.Interface())
	return v.Interface()
}

// FromPtr 将 *T 转为 T（用于从 Bo 取值）
func FromPtr[T any](ptr *T) T {
	if ptr == nil {
		var zero T
		return zero
	}
	return *ptr
}

// ToPtr 将 T 转为 *T（用于构建 Vo）
func ToPtr[T any](val T) *T {
	return &val
}

// IsSuperAdmin 判断用户是否是超级管理员
func IsSuperAdmin(userID int64) bool {
	// 示例逻辑，根据你的权限系统判断
	return userID == 1 // 假设 userID=1 是超管
}
